home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch5 / FrmScale.frm (.txt) < prev    next >
Visual Basic Form  |  1999-04-05  |  3KB  |  100 lines

  1. VERSION 5.00
  2. Begin VB.Form frmFrmScale 
  3.    Caption         =   "FrmScale"
  4.    ClientHeight    =   3405
  5.    ClientLeft      =   2640
  6.    ClientTop       =   1635
  7.    ClientWidth     =   3405
  8.    LinkTopic       =   "Form1"
  9.    PaletteMode     =   1  'UseZOrder
  10.    ScaleHeight     =   3405
  11.    ScaleWidth      =   3405
  12.    Begin VB.Menu mnuFile 
  13.       Caption         =   "&File"
  14.       Begin VB.Menu mnuFilePrint 
  15.          Caption         =   "&Print"
  16.       End
  17.    End
  18. Attribute VB_Name = "frmFrmScale"
  19. Attribute VB_GlobalNameSpace = False
  20. Attribute VB_Creatable = False
  21. Attribute VB_PredeclaredId = True
  22. Attribute VB_Exposed = False
  23. Option Explicit
  24. ' Draw a Bowditch curve on the indicated object.
  25. Private Sub DrawPicture(obj As Object)
  26. Const PI = 3.14159265
  27. Dim x As Integer
  28. Dim y As Integer
  29. Dim t As Single
  30. Dim maxt As Single
  31. Dim dt As Single
  32.     ' Draw the curve.
  33.     maxt = PI * 8
  34.     dt = maxt / 200
  35.     obj.CurrentX = 0
  36.     obj.CurrentY = 0
  37.     For t = dt To maxt + dt / 2 Step dt
  38.         obj.Line -(Sin(0.75 * t), Sin(t))
  39.     Next t
  40. End Sub
  41. ' Set the printer's scale properties so it will
  42. ' print the object as large as possible, centered
  43. ' in the printable area.
  44. Private Sub SetLargePrinterScale(obj As Object)
  45. Dim owid As Single
  46. Dim ohgt As Single
  47. Dim pwid As Single
  48. Dim phgt As Single
  49. Dim xmid As Single
  50. Dim ymid As Single
  51. Dim s As Single
  52.     ' Get the object's size in twips.
  53.     owid = obj.ScaleX(obj.ScaleWidth, obj.ScaleMode, vbTwips)
  54.     ohgt = obj.ScaleY(obj.ScaleHeight, obj.ScaleMode, vbTwips)
  55.     ' Get the printer's size in twips.
  56.     pwid = Printer.ScaleX(Printer.ScaleWidth, Printer.ScaleMode, vbTwips)
  57.     phgt = Printer.ScaleY(Printer.ScaleHeight, Printer.ScaleMode, vbTwips)
  58.     ' Compare the object and printer aspect ratios.
  59.     If ohgt / owid > phgt / pwid Then
  60.         ' The object is relatively tall and thin.
  61.         ' Use the printer's whole height.
  62.         s = phgt / ohgt ' This is the scale factor.
  63.     Else
  64.         ' The object is relatively short and wide.
  65.         ' Use the printer's whole width.
  66.         s = pwid / owid ' This is the scale factor.
  67.     End If
  68.     ' Convert the printer's dimensions into scaled
  69.     ' object coordinates.
  70.     pwid = obj.ScaleX(pwid, vbTwips, obj.ScaleMode) / s
  71.     phgt = obj.ScaleY(phgt, vbTwips, obj.ScaleMode) / s
  72.     ' See where the center should be.
  73.     xmid = obj.ScaleLeft + obj.ScaleWidth / 2
  74.     ymid = obj.ScaleTop + obj.ScaleHeight / 2
  75.     ' Pass the coordinates of the upper left and
  76.     ' lower right corners into the Scale method.
  77.     Printer.Scale _
  78.         (xmid - pwid / 2, ymid - phgt / 2)- _
  79.         (xmid + pwid / 2, ymid + phgt / 2)
  80. End Sub
  81. ' Draw the picture on the form.
  82. Private Sub Form_Paint()
  83.     DrawPicture Me
  84. End Sub
  85. ' Reset the form scale properties so the picture
  86. ' fills the whole form.
  87. Private Sub Form_Resize()
  88.     Me.Scale (-1.1, -1.1)-(1.1, 1.1)
  89.     Me.Refresh
  90. End Sub
  91. ' Draw the picture on the Printer object.
  92. Private Sub mnuFilePrint_Click()
  93.     MousePointer = vbHourglass
  94.     DoEvents
  95.     SetLargePrinterScale Me ' Set scale properties.
  96.     DrawPicture Printer     ' Draw the picture.
  97.     Printer.EndDoc
  98.     MousePointer = vbDefault
  99. End Sub
  100.